/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package sofia.Persistencia.Managers;


import Principal.MainSofia;
import java.util.Iterator;
import java.util.List;
import javax.persistence.EntityExistsException;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.PersistenceUnit;
import javax.persistence.Query;
import javax.persistence.RollbackException;
import sofia.LogicaNegocio.Tratamiento;
import sofia.Persistencia.Entidades.ETratamiento;
/**
 *
 * @author dervalo
 */
public class MTratamiento {

        @PersistenceUnit
        private EntityManagerFactory managerFactory;
        private EntityManager entityManager;

        public MTratamiento() {
                managerFactory = MainSofia.managerFactory;
                entityManager = managerFactory.createEntityManager();
        }

        /**
        * Este metodo se encarga de la persistencia en la entidad Informe
        * de un objeto Informe.
        *
         * @param objTratamiento
         * @throws RollbackException
         * @throws EntityExistsException 
         */
        public void crearTratamiento( final Tratamiento objTratamiento ) throws RollbackException, EntityExistsException {
                entityManager.clear();
                ETratamiento entidadTratamiento = new ETratamiento();
                entidadTratamiento.setIntensidadSemanal( objTratamiento.getIntensidadSemanal() );
                entidadTratamiento.setObjetivos( objTratamiento.getObjetivos() );

                //persiste el objeto en la entidad
                EntityTransaction transaccion = entityManager.getTransaction();
                try {
                        transaccion.begin();
                        entityManager.persist( entidadTratamiento );
                }
                catch (EntityExistsException ex) {
                        throw ex;
                }
                finally {
                        transaccion.commit();
                }
                entityManager.clear();
        }


        public void actualizarTratamiento( final String idTratamiento , final Tratamiento tratamiento ) {
                entityManager.clear();
                ETratamiento entidadTratamiento;
                EntityTransaction transaccion = entityManager.getTransaction();
                transaccion.begin();
                entidadTratamiento = entityManager.find( ETratamiento.class , idTratamiento );
                transaccion.commit();
                if( entidadTratamiento != null ) {
//                        la llave es unica no puede ser cambiada
//                        entidadPaciente.setIdCedula( paciente.getIdCedula() );
                        entidadTratamiento.setIntensidadSemanal( tratamiento.getIntensidadSemanal() );
                        entidadTratamiento.setObjetivos( tratamiento.getObjetivos() );

                        transaccion.begin();
                        entityManager.merge( entidadTratamiento );
                        transaccion.commit();
                }
                entityManager.clear();
        }

        public void eliminarReporteCoordinador( final int idTratamiento ) {
                entityManager.clear();
                ETratamiento entidadTratamiento;
                EntityTransaction transaccion = entityManager.getTransaction();
                transaccion.begin();
                entidadTratamiento = entityManager.find( ETratamiento.class , idTratamiento );
                entityManager.remove( entidadTratamiento );
                transaccion.commit();
                entityManager.clear();
        }

        public Tratamiento obtenerTratamiento( final String idTratamiento ) {
                entityManager.clear();
                ETratamiento entidadTratamiento;
                Tratamiento tratamiento = null;
                EntityTransaction transaccion = entityManager.getTransaction();
                transaccion.begin();
                entidadTratamiento = entityManager.find( ETratamiento.class , idTratamiento );
                transaccion.commit();
                if( entidadTratamiento != null ) {
//                        tratamiento = new Tratamiento();
//                        tratamiento.setIdTratamiento( entidadTratamiento.getIdTratamiento() );
//                        tratamiento.setIntensidadSemanal( entidadTratamiento.getIntensidadSemanal() );
//                        tratamiento.setObjetivos( entidadTratamiento.getObjetivos() );
                }
                entityManager.clear();
                return tratamiento;
        }


        public List obtenerTratamientosRegistrados() {
                entityManager.clear();
                EntityTransaction transaccion = entityManager.getTransaction();
                transaccion.begin();
                List tratamientos = null;
                Query query = entityManager.createQuery( "SELECT eTratamiento FROM EPaciente eTratamiento" );
                tratamientos = query.getResultList();
                transaccion.commit();
                if( !tratamientos.isEmpty() ) {
                        System.out.println( "Leyendo " + tratamientos.size() + " comentarios" );
                        Iterator stIterator = tratamientos.iterator();
                        while( stIterator.hasNext() ){
                                ETratamiento entidadTratamiento = (ETratamiento)stIterator.next();
                                System.out.println( "id " + entidadTratamiento.getIdTratamiento() );
                                System.out.println( "intensidad " + entidadTratamiento.getIntensidadSemanal() );
                                System.out.println( "objetivos " + entidadTratamiento.getObjetivos() );
                        }
                }
                entityManager.clear();
                return tratamientos;
        }


}
